package com.kfm.base.map;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;

public class Demo02 {

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();

        map.put("a", 1);

        System.out.println(map);

        // 更新 a 的值
//        map.put("a", map.get("a") + 1);
        /*
            更新 key 的值
            如果 key 存在：
                返回的新值不是 null，则更新 key 的值
                返回的新值是 null，则将 map 的 key 删除
            如果 key 不存在，返回的新值不是 null，则添加
         */
//        map.compute("b", (k, v) -> {
//            return v == null ? 0 : v + 1;
//        });

        /**
         * 如果 key 在 map 中存在且值不是 null 则不调用函数，直接返回 旧值
         * 否则(key 不存在或 key 的值为 null)，调用函数。函数返回的新值不是 null 就添加到 map 中, 返回新值
         */
//        Integer oldValue = map.computeIfAbsent("b", (v) -> 2);

        /**
         * 如果 key 在 map 中不存在或值是 null 则不调用函数，直接返回 null
         * 否则
         *      调用函数，返回一个新值。新值不为 null 则更新 map 的值.
         *        新值是 null 则删除这个 key
         *
         */
        Integer oldValue = map.computeIfPresent("a", (k, v) -> v + 1);

        map.computeIfPresent("a", new BiFunction<String, Integer, Integer>() {
            @Override
            public Integer apply(String s, Integer integer) {
                return null;
            }
        });

        System.out.println(oldValue);
        System.out.println(map);
    }
}
